'use strict';

const Controller = require('egg').Controller;

class InterviewScheduleController extends Controller {
  // 获取日程列表
  async index() {
    const { ctx } = this;
    // 从JWT token中获取用户信息（可选，管理员可能没有token）
    const tokenUserId = ctx.user?.id;
    
    const { page = 1, pageSize = 10, company_id, user_id } = ctx.query;
    
    try {
      const options = {
        page: parseInt(page),
        pageSize: parseInt(pageSize)
      };
      
      // 优先级：company_id > user_id > tokenUserId > 查询全部（管理员）
      if (company_id) {
        options.company_id = parseInt(company_id);
      } else if (user_id) {
        options.user_id = parseInt(user_id);
      } else if (tokenUserId) {
        // 有token的情况，默认查询当前用户的日程
        options.user_id = tokenUserId;
      }
      // 如果都没有，不设置筛选条件，返回所有日程（管理员权限）
      
      const result = await ctx.service.interviewSchedule.findAll(options);
      
      ctx.body = {
        code: 200,
        message: '获取日程列表成功',
        data: result.data,
        pagination: result.pagination,
      };
    } catch (error) {
      ctx.logger.error('获取日程列表失败:', error);
      ctx.body = {
        code: 500,
        message: '获取日程列表失败',
        data: null,
      };
    }
  }

  // 获取日程详情
  async show() {
    const { ctx } = this;
    const { id } = ctx.params;
    
    try {
      const schedule = await ctx.service.interviewSchedule.findById(id);
      if (schedule) {
        ctx.body = {
          code: 200,
          message: '获取日程详情成功',
          data: schedule,
        };
      } else {
        ctx.body = {
          code: 404,
          message: '日程不存在',
          data: null,
        };
      }
    } catch (error) {
      ctx.logger.error('获取日程详情失败:', error);
      ctx.body = {
        code: 500,
        message: '获取日程详情失败',
        data: null,
      };
    }
  }

  // 创建日程
  async create() {
    const { ctx } = this;
    const data = ctx.request.body;
    
    // 验证登录状态
    const currentUserId = ctx.user?.id;
    if (!currentUserId) {
      ctx.body = {
        code: 401,
        message: '未登录',
        data: null
      };
      return;
    }
    
    // 验证必填字段
    if (!data.user_id) {
      ctx.body = {
        code: 400,
        message: '请选择候选人',
        data: null
      };
      return;
    }
    
    if (!data.company_id) {
      ctx.body = {
        code: 400,
        message: '企业信息缺失',
        data: null
      };
      return;
    }
    
    // 注意：data.user_id 是候选人的ID，不要覆盖它！
    
    try {
      const schedule = await ctx.service.interviewSchedule.create(data);
      ctx.body = {
        code: 200,
        message: '创建日程成功',
        data: schedule,
      };
    } catch (error) {
      ctx.logger.error('创建日程失败:', error);
      ctx.body = {
        code: 500,
        message: '创建日程失败',
        data: null,
      };
    }
  }

  // 更新日程
  async update() {
    const { ctx } = this;
    const { id } = ctx.params;
    const data = ctx.request.body;
    
    try {
      const schedule = await ctx.service.interviewSchedule.update(id, data);
      if (schedule) {
        ctx.body = {
          code: 200,
          message: '更新日程成功',
          data: schedule,
        };
      } else {
        ctx.body = {
          code: 404,
          message: '日程不存在',
          data: null,
        };
      }
    } catch (error) {
      ctx.logger.error('更新日程失败:', error);
      ctx.body = {
        code: 500,
        message: '更新日程失败',
        data: null,
      };
    }
  }

  // 删除日程
  async destroy() {
    const { ctx } = this;
    const { id } = ctx.params;
    
    try {
      const result = await ctx.service.interviewSchedule.delete(id);
      if (result) {
        ctx.body = {
          code: 200,
          message: '删除日程成功',
          data: null,
        };
      } else {
        ctx.body = {
          code: 404,
          message: '日程不存在',
          data: null,
        };
      }
    } catch (error) {
      ctx.logger.error('删除日程失败:', error);
      ctx.body = {
        code: 500,
        message: '删除日程失败',
        data: null,
      };
    }
  }
}

module.exports = InterviewScheduleController;
